﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using System.Web;
using System.Configuration;

namespace NHibernateBusiness.Common
{
    /// <summary>    
    /// 功能：此类用于Web应用，NHibernate提供的Session有两个缺陷：    
    ///       一方面是线程不安全的，另一方面每次数据库操作创建一个Session对程序性能有影响。    
    ///       因此通过将Session绑定到HttpContext上，这样每个用户具有唯一的一个Session，而且    
    ///       在用户的请求结束后关闭Session并自己释放掉。    
    ///       储存一个ISession <see cref="HttpContext.Items" /> 集合.
    /// </summary>
    public class HttpSessionSource : ISessionStorage
    {
        private string Key
        {
            get
            { 
                return ConfigurationManager.AppSettings["Key"];
            }
        }
        public ISession Get()
        {
            return (ISession)HttpContext.Current.Items[Key];
        }

        public void Set(ISession session)
        {
            if (session != null)
            {
                HttpContext.Current.Items.Add(Key, session);
            }
            else
            {
                HttpContext.Current.Items.Remove(Key);
            }
        }
    }
}
